// ContainerListQueryProp 容器列表查询
import ReactDOM from "react-dom/client";
import * as React from "react";

export interface ContainerListQueryProp {
    page: number; // 当前页码
    size: number; // 当前页大小
    orderName?: string; // 排序字段 name|createTime|health|status
    orderWay?: string; // 排序方式 递增/递减
    name?: string; // 容器名称
    isAll?: boolean; // 是否显示全部，默认仅显示正在运行的容器
    label?: string; // 标签
    expose?: string; // 暴露的端口
    exited?: string; // 容器退出的状态码
    health?: string; // 容器的健康状态 starting|healthy|unhealthy|none
    network?: string; // 网络 id/name
    publish?: string; // 端口
    status?: string; // 容器状态 created|restarting|running|removing|paused|exited|dead
    volume?: string; // 挂载 volume name
    id?: string;  // 容器ID
}

// ContainerListProp docker容器列表属性
export interface ContainerListProp {
    id: string;// 主键
    name: string; // 容器名称
    imageId: string; // 镜像ID
    imageName: string; // 镜像名称
    ports: string[];// 端口
    state: string; // 状态
    status: string; // 状态
    runtime: string; // 运行时长
    createTime: string; // 创建时间
}

// ImageListQueryProp 容器镜像分页查询
export interface ImageListQueryProp {
    page: number; // 页码
    size: number; // 页大小
    isAll?: boolean; // 是否显示全部镜像
    name?: string; // 查询镜像名称
    orderField?: string; // 排序字段
    order?: boolean; // 排序方式
}

// ImageListProp 容器镜像Table属性
export interface ImageListProp {
    id: string; // 镜像Id
    name: string; // 镜像名称
    tags: string[]; // 镜像标签
    size: number; // 镜像大小
    createTime: string; // 创建时间
    container: number; // 容器使用数
}

// ContainerOperateProp 容器操作属性
export interface ContainerOperateProp {
    id?: string; // 容器ID
    way?: number; // 操作类型
    name?: string; // 新容器的名称 （重命名的是需要）
    removeVolumes?: boolean; // 删除挂载卷 （执行移除的是需要）
    removeLinks?: boolean; // 删除与容器相关的指定链接 （执行移除的是需要）
    force?: boolean; // 是否强制删除 （执行移除的是需要）
}

export interface ContainerDrawerProp {
    createVisible: boolean;
}

// ContainerCreateDrawerProp 容器创建抽屉属性
export interface ContainerCreateDrawerProp {
    visible: boolean;
    close: (isLoad: boolean) => void;
}

// ImageSearchDrawerProp 镜像搜索抽屉属性
export interface ImageSearchDrawerProp {
    visible: boolean;
    close: (isLoad: boolean) => void;
}

// ImageSearchProp 镜像搜索返回属性
export interface ImageSearchProp {
    name: string; // 镜像名称
    desc: string; // 描述
    isOfficial: boolean; // 是否官方
    isAutomated: boolean; // 持续集成
    stars: number; // star数
}

// ImageSearchQueryProp 镜像搜索查询属性
export interface ImageSearchQueryProp {
    name?: string; // 搜索名称
    limit?: number; // 返回数量
    stars?: number; // star数量
    isOfficial: -1 | 1 | 0; // 是否是官方
    isAutomated: -1 | 1 | 0 // 是否支持持续集成
}

// ImagePullResultProp 镜像拉取结果查询
export interface ImagePullResultProp {
    id: number; // 任务ID
    status: number; // 任务状态
    msg?: string; // 消息
}

export interface ImagesTagsProp {
    name: string;
    selectTag: (tag: string) => void;
}

// ImageTagQueryProp 镜像Tag查询
export interface ImageTagQueryProp {
    imageName: string; // 镜像名称
    page: number; // 页码
    size: number; // 页大小
    name?: string; // 过滤名
    ordering?: string; // 排序方式
}

// ImageTagTableProp 镜像Tag表格属性
export interface ImageTagTableProp {
    id: number; // ID
    name: string; // 名称
    full_size: number; // 大小
    tag_status: string; // 状态
    last_update: string; // 最后更新时间
    digest: string;  // 唯一标识
}

// ImageSetTagDrawerProp 设置镜像tag
export interface ImageSetTagDrawerProp {
    visible: boolean;
    target?: ImageListProp;
    close: (isLoad: boolean) => void;
}

// ImageInfoDrawerProp 镜像详情
export interface ImageInfoDrawerProp {
    visible: boolean;
    imageId?: string;
    close: () => void;
}

// ImageExportDrawerProp 镜像导入
export interface ImageExportDrawerProp {
    visible: boolean;
    target?: ImageListProp;
    close: () => void;
}

export interface ImageDrawerProp {
    importVisible: boolean;
    exportVisible: boolean;
    tagVisible: boolean;
    infoVisible: boolean;
    target?: ImageListProp;
}

export const DefaultImageDrawerProp: ImageDrawerProp = {
    importVisible: false,
    exportVisible: false,
    tagVisible: false,
    infoVisible: false,
    target: undefined
}

// ImageExportFormProp 镜像导出表单属性
export interface ImageExportFormProp {
    imageId: string; // ID镜像
    path: string; // 保存路径
    newName: string; // 保存名字
}